itertools, more-itertools
繰り返し処理の記述が楽になるライブラリ
itertoolsは標準、more-itertoolsは要インストールで最近追加された
関数の一覧と、ざっくり挙動を書いていく
itertools
repeat(elem, n=inf) : elemをn回見る
count(start, step=1) : start から step 間隔で連番を得る
cycle(p) : pの要素を順に見て、最後まで見たらまた最初から見る
chain(p, q, ...) : pの要素を順に見て、qの要素を順に見て……
chain.from_iterable(p) : p[0]の要素を順に見て、p[1]の要素を順に見て……
islice(p, stop) : ほぼp[:stop]
islice(p, start, stop, step) : ほぼp[start:stop:step]
pairwise(p) : 隣り合う要素を順に得る
accumulate(p. func) : pの累積和を順に得る。funcを指定すると累積funcにできる
starmap(func, seq) : func(*seq[i])を順に得る
dropwhile(pred, seq) : pred(seq[i])が初めてFalseになった場所から見る
takewhile(pred, seq) : pred(seq[i])がFalseになるまで見る
filterfalse(pred, seq) : pred(seq[i])がFalseになる場所だけ見る
compress(data, selectors) : selectorsがTrueになる項だけ得る
groupby(p, keyfunc=None) : 連続する同じ値をまとめて得る。RLEっぽい
zip_longest(p, q, ..., fillvalue=None) : 最も長い要素に合わせてzip
tee(p, n=2) : n個のイテレータを作る
product(p, q, ..., repeat=1) : 直積(p×q)^repeat
permutations(p, r) : pの長さrの順列
combinations(p, r) : pの長さrの組み合わせ
combinations_with_replacement(p, r) : pの長さrの重複アリ組み合わせ
以下は Python 3.12 以降(AtCoderではまだ使えない)
batched(p, n) : pをn組に分ける。